/**
 * 实现三个线程按顺序执行的示例
 * T1执行完后T2执行，T2执行完后T3执行
 */
package day28.homework;

public class hw3 {
    public static void main(String[] args) throws InterruptedException {
        // 创建三个线程对象
        Thread t1 = new Thread(new T1Thead());
        Thread t2 = new Thread(new T2Thead(t1));
        Thread t3 = new Thread(new T3Thead(t2));
        
        // 启动线程
        t1.start(); // 启动线程T1
        t2.start(); // 启动线程T2
        t3.start(); // 启动线程T3
        
        // 主线程等待t3执行完毕再结束
        t3.join();
    }
}

// 定义T1线程要执行的任务
class T1Thead implements Runnable {
    @Override
    public void run() {
        System.out.println("T1执行");
    }
}

// 定义T2线程要执行的任务
class T2Thead implements Runnable {
    private Thread t1;
    
    // 构造方法，传入需要等待的线程
    public T2Thead(Thread t1) {
        this.t1 = t1;
    }
    
    @Override
    public void run() {
        try {
            // 等待t1线程执行完毕后再继续执行
            // 这样可以确保T1执行完后T2才执行
            t1.join();
            System.out.println("T2执行");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

// 定义T3线程要执行的任务
class T3Thead implements Runnable {
    private Thread t2;
    
    // 构造方法，传入需要等待的线程
    public T3Thead(Thread t2) {
        this.t2 = t2;
    }
    
    @Override
    public void run() {
        try {
            // 等待t2线程执行完毕后再继续执行
            // 这样可以确保T2执行完后T3才执行
            t2.join();
            System.out.println("T3执行");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}